package com.southminority.ethnic.service.course;

import com.southminority.ethnic.pojo.CourseEvaluation;
import com.southminority.ethnic.controller.coures.vo.CourseEvaluationSummaryVo;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.util.List;

/**
* @author ASHTR
* @description 针对表【course_evaluation(课程评价表)】的数据库操作Service
* @createDate 2025-01-20 10:00:00
*/
public interface CourseEvaluationService extends IService<CourseEvaluation> {

    /**
     * 批量导入课程评价数据
     * @param list 课程评价数据列表
     * @return 是否导入成功
     */
    Boolean InputList(List<CourseEvaluation> list);

    /**
     * 根据课程ID查询评价列表
     * @param courseId 课程ID
     * @return 评价列表
     */
    List<CourseEvaluation> getEvaluationsByCourseId(Long courseId);
    
    /**
     * 根据用户ID查询评价列表
     * @param userId 用户ID
     * @return 评价列表
     */
    List<CourseEvaluation> getEvaluationsByUserId(Long userId);
    
    /**
     * 计算课程平均评分
     * @param courseId 课程ID
     * @return 平均评分
     */
    Double getAverageRating(Long courseId);
    
    /**
     * 获取课程评价统计信息
     * @param courseId 课程ID
     * @param userId 当前用户ID
     * @return 评价统计信息
     */
    CourseEvaluationSummaryVo getEvaluationSummary(Long courseId, Long userId);
    
    /**
     * 添加或更新课程评价
     * @param courseId 课程ID
     * @param userId 用户ID
     * @param userName 用户名称
     * @param rating 评分
     * @param content 评价内容
     * @return 评价信息
     */
    CourseEvaluation addOrUpdateEvaluation(Long courseId, Long userId, String userName, Integer rating, String content);
    
    /**
     * 检查用户是否已评价该课程
     * @param courseId 课程ID
     * @param userId 用户ID
     * @return 是否已评价
     */
    Boolean hasUserEvaluated(Long courseId, Long userId);
    
    /**
     * 获取用户对指定课程的评价
     * @param courseId 课程ID
     * @param userId 用户ID
     * @return 评价信息
     */
    CourseEvaluation getUserEvaluation(Long courseId, Long userId);
    
    /**
     * 删除用户对指定课程的评价
     * @param courseId 课程ID
     * @param userId 用户ID
     * @return 是否删除成功
     */
    Boolean deleteUserEvaluation(Long courseId, Long userId);
    
    /**
     * 分页查询课程评价列表（带关键词搜索）
     * @param page 分页对象
     * @param keyword 搜索关键词
     * @return 分页结果
     */
    Page<CourseEvaluation> getEvaluationPageWithKeyword(Page<CourseEvaluation> page, String keyword);
} 